package furstadminka.validators;

import furstadminka.UploaderBean;
import furstadminka.utils.BeanUtils;
import furstadminka.utils.Preconditions;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import java.util.ResourceBundle;

/**
 * Класс, созданный для проверки факта загруженности изображения и заодно поля прайс
 *
 * @author Vit
 */
public class UplodoadedFileAndPriceValidator implements Validator {

    /**
     * Тут происходит проверка наличия файла, соответсвия прайса буквам и его соответсвиям максимальным ценам
     */
    public void validate(FacesContext facesContext, UIComponent uiComponent, Object o) throws ValidatorException {
        Preconditions.notNull(facesContext, uiComponent, o);
        String priceS = (String) o;
        float price;
        try {
            price = Float.parseFloat(priceS);
        } catch (Exception e) {
            throw new ValidatorException(addErrorMessage(getErrorFromLocal("pricehavechar", facesContext)));
        }
        if (price > 10000) {
            throw new ValidatorException(addErrorMessage(getErrorFromLocal("pricetoolong", facesContext)));
        }
        if (price < 0) {
            throw new ValidatorException(addErrorMessage(getErrorFromLocal("priceunderzero", facesContext)));
        }
        UploaderBean uploaderBean = (UploaderBean) BeanUtils.getBean("uploaderbean");
        Preconditions.notNull(uploaderBean);
        if (uploaderBean.getSmallImageName().equals("") || uploaderBean.getSmallImageName() == null) {
            throw new ValidatorException(addErrorMessage(getErrorFromLocal("imageisnotload", facesContext)));
        }
    }

    /**
     * Проверка строки на пустотность и null
     *
     * @param s Трока для проверки
     * @return true если проверка пройден, false если нет
     */
    private static Boolean validateString(String s) {
        if ((s.equals(null)) || (s.equals(""))) {
            return false;
        }
        return true;
    }

    /**
     * Возвращает готовый объект сообщения
     *
     * @param textMessage Текст для сообщения
     */
    private FacesMessage addErrorMessage(String textMessage) {
        Preconditions.notBlank(textMessage);
        FacesMessage message = new FacesMessage(textMessage);
        message.setSeverity(FacesMessage.SEVERITY_ERROR);
        return message;
    }

    /**
     * Возвращает текст, взятый из текущей локали
     *
     * @param paramName    Название слова в файле локали
     * @param facesContext Текущий контекст
     */
    private String getErrorFromLocal(String paramName, FacesContext facesContext) {
        ResourceBundle bundle = ResourceBundle.getBundle("furstadminka.localisation.validationmessages", facesContext.getExternalContext().getRequestLocale());
        String validateMessage = "";
        validateMessage = bundle.getString(paramName);
        if (validateMessage != null || validateMessage != "") {
            return validateMessage;
        }
        return "";
    }
}

